{% extends "base.html" %} {% block title %}AI Handler Β· {{ app_name }}{% endblock %} {% block body %}
Not on a hosted instance β the AI Handler talks to a model on the pup's own network, and a hosted box's network is not yours.
This box's Pup ID is a Handler's: a person handles here, so there is no AI Handler on it.
This box's Pup ID is an AI's: it is a kennel, and its model is the Handler of the packs it hosts. It speaks to their collared members, never to you. For each one it reads only what the kennel view shows β the card their box signed for their Handler, their signed grants, how their box answered its last commands β and queues at most three commands and a line, clamped to what they granted. Their box decides. π
π This module says it reaches the network. {{ egress }}
{{ m.fp }} {{ m.pack }} Β·
{% if m.why %}not asked: {{ {'not_collared': 'not wearing its collar', 'no_card': 'no card yet', 'paused': 'paused',
'nothing_granted': 'granted it nothing to do', 'not_member': 'not a member',
'silent': 'their box has not synced in days'}[m.why] }}{% else %}asked on each thought{% endif %}
{% if m.last %}Β· last {{ m.last|rel(now) }}{% endif %}| when | member | what | said | queued | shown |
|---|---|---|---|---|---|
| {{ r.ts|rel(now) }} | {% if r.fp %}{{ r.fp }}{% else %}β{% endif %} |
{% if r.kind == 'guard' %}refused Β· {{ r.error }}{% elif not r.ok %}no answer Β· {{ r.error }}{% else %}thought{% if r.error %} Β· {{ r.error }}{% endif %}{% endif %} |
{{ r.body or 'β' }} | {% for a in r.actions %}{{ a.type }} Β· {{ kennel_codes.get(a.code, a.code) }} {% else %}β{% endfor %} | {% for g in r.context %}{{ g }} {% endfor %} |
| Nothing yet. | |||||
Your AI Handler is a language model on your own Ollama β on this machine or your own network. Give it the address and the model in Settings β AI Handler, switch it on, and tick what it may see and do on Consent. Until then it makes no call to anything. π
π This module says it reaches the network. {{ egress }}
π Everything is paused: your AI Handler does nothing, sees nothing it was granted, and gets none of your reflections until you resume.
{% endif %}{{ line.text }} tap to reveal
{{ line.ts|rel(now) }} Β· never relayed
{% elif line %}β{{ line.text }}β
{{ line.ts|rel(now) }}{% if line.relay %} Β· safe to relay{% else %} Β· never relayed{% endif %}
{% else %}Nothing said today.
{% endif %}Nothing granted{% if paused %} that it can use while paused{% endif %} β it sees today's duties, your streak, your own training and the app's own observations, and can do nothing.
{% endif %} {% if preview %}{{ preview }}Never your reflections (chat only), never anybody else's words, nothing about your health but βgo gentlyβ. π
| when | what | said | asked for | shown |
|---|---|---|---|---|
| {{ r.ts|rel(now) }} | {% if r.kind == 'guard' %}refused Β· {{ error_says(r.error) }}{% elif not r.ok %}no answer Β· {{ error_says(r.error) }}{% else %}thought{% if r.error %} Β· {{ error_says(r.error) }}{% endif %}{% endif %} | {{ r.shown or 'β' }}{% if r.relay %} relay-safe{% endif %} | {% for a in r.actions %}{{ a.type }} Β· {{ action_says.get(a.code, a.code) }} {% else %}β{% endfor %} | {% for g in r.context %}{{ g }} {% endfor %} |
| Nothing yet. | ||||